package com.acg.auth.controller;


import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Dict;
import com.acg.exception.ACGException;
import com.acg.util.Result;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

//处理文件上传和下载的接口
@RestController
@RequestMapping("/files")
@CrossOrigin("*")
public class FileController {

    //上传接口
    @PostMapping("/upload")
    public Result upload(@RequestParam("file") MultipartFile file) throws Exception {
        //找到文件路径
        String filePath = System.getProperty("user.dir") + "/files/";
        //若路径不是文件夹则创建文件夹
        if (!FileUtil.isDirectory(filePath)){
            FileUtil.mkdir(filePath);
        }
        //获取文件的原始名称
        String filename = System.currentTimeMillis() + "_" + file.getOriginalFilename(); //在文件名后加上当前毫秒数，防止同名
        byte[] bytes = file.getBytes();
        // 写入文件
        FileUtil.writeBytes(bytes,filePath + filename);
        String url = "http://localhost:8800/files/download/" + filename;
        return Result.ok(url);
    }


    //下载接口  路径：http://ip:端口/files/download/{文件名}
    @GetMapping("/download/{fileName}")
    public void download(@PathVariable String fileName, HttpServletResponse response) throws Exception {    // @PathVariable 路径参数
        //找到文件的位置
        String filePath = System.getProperty("user.dir") + "/files/";   // System.getProperty("user.dir") 获取到当前项目的根路径 （code2025的绝对路径 D:\VueProject\code2025）
        String realPath = filePath + fileName; // 最终文件路径 D:\VueProject\code2025\files\Aya.png
        boolean exist = FileUtil.exist(realPath);
        if (!exist){
            throw new ACGException("文件不存在",500);
        }
        // 读取文件字节流
        byte[] bytes = FileUtil.readBytes(realPath);
        ServletOutputStream os = response.getOutputStream();//通过 response 获取输出流
        // 同过输出流对象把文件写出到客户端
        os.write(bytes);
        os.flush();
        os.close();
    }

    // wang-editor 富文本编辑器 文件上传接口
    @PostMapping("/wang/upload")
    public Map<String,Object> wangEditorUpload(MultipartFile file){
        String flag = System.currentTimeMillis() + "";
        String fileName = file.getOriginalFilename();
        try {
            String filePath = System.getProperty("user.dir") + "/files/";
            // 文件存储形式：时间戳-文件名
            FileUtil.writeBytes(file.getBytes(),filePath + flag + "-" +fileName);
            System.out.println(fileName + "--上传成功");
            Thread.sleep(1L);
        } catch (Exception e) {
            System.err.println(fileName + "--文件上传失败");
        }
        String http = "http://localhost:8800/files/download/";
//        Map<String,Object> resMap = new HashMap<>();
//        // wangEditor 上传图片成功后，需要返回参数
//        resMap.put("errno",0);
//        resMap.put("data", CollUtil.newArrayList(Dict.create().set("url",http + flag + "-" + fileName)));
//        return resMap;

        Map<String, Object> resMap = new HashMap<>();
        // 修改为直接返回对象而不是数组
        resMap.put("errno", 0);
        resMap.put("data", Dict.create().set("url", http + flag + "-" + fileName));
        return resMap;

    }

}
